// API 测试脚本
// 使用方法: node test-api.js
// 运行前请确保服务器已启动: npm run dev

const API_BASE = 'http://localhost:3000/api';

async function makeRequest(url, options = {}) {
  try {
    const response = await fetch(url, options);
    const data = await response.json();
    return { success: response.ok, status: response.status, data };
  } catch (error) {
    return { success: false, error: error.message };
  }
}

async function testAPI() {
  console.log('🧪 开始测试 Node.js + MySQL API...\n');
  
  try {
    // 1. 测试根路径
    console.log('🔍 1. 测试服务器状态:');
    let result = await makeRequest('http://localhost:3000');
    if (result.success) {
      console.log('✅ 服务器响应正常');
      console.log('Response:', JSON.stringify(result.data, null, 2));
    } else {
      console.log('❌ 服务器连接失败:', result.error || result.data?.error);
      return;
    }
    console.log('\n');
    
    // 2. 获取所有用户
    console.log('📋 2. 获取所有用户:');
    result = await makeRequest(`${API_BASE}/users`);
    if (result.success) {
      console.log(`✅ 成功获取 ${result.data.count} 个用户`);
      console.log('用户列表:', JSON.stringify(result.data.data, null, 2));
    } else {
      console.log('❌ 获取用户失败:', result.data?.error || result.error);
    }
    console.log('\n');
    
    // 3. 获取活跃用户
    console.log('👥 3. 获取活跃用户:');
    result = await makeRequest(`${API_BASE}/users/status/active`);
    if (result.success) {
      console.log(`✅ 成功获取 ${result.data.count} 个活跃用户`);
      console.log('活跃用户:', result.data.data.map(u => `${u.name} (${u.email})`).join(', '));
    } else {
      console.log('❌ 获取活跃用户失败:', result.data?.error || result.error);
    }
    console.log('\n');
    
    // 4. 创建新用户
    console.log('➕ 4. 创建新用户:');
    const newUser = {
      name: '测试用户',
      email: `test${Date.now()}@example.com`, // 使用时间戳确保邮箱唯一
      phone: '13800138888',
      age: 25
    };
    
    result = await makeRequest(`${API_BASE}/users`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(newUser)
    });
    
    if (result.success) {
      const userId = result.data.data.id;
      console.log(`✅ 用户创建成功，ID: ${userId}`);
      console.log('新用户信息:', JSON.stringify(result.data.data, null, 2));
      
      // 5. 获取指定用户
      console.log('\n👤 5. 获取新创建的用户:');
      result = await makeRequest(`${API_BASE}/users/${userId}`);
      if (result.success) {
        console.log('✅ 成功获取用户信息');
        console.log('用户详情:', JSON.stringify(result.data.data, null, 2));
      } else {
        console.log('❌ 获取用户失败:', result.data?.error || result.error);
      }
      
      // 6. 更新用户
      console.log('\n✏️ 6. 更新用户信息:');
      const updatedData = {
        name: '测试用户-已更新',
        phone: '13900139999',
        age: 30
      };
      
      result = await makeRequest(`${API_BASE}/users/${userId}`, {
        method: 'PUT',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(updatedData)
      });
      
      if (result.success) {
        console.log('✅ 用户更新成功');
        console.log('Response:', JSON.stringify(result.data, null, 2));
      } else {
        console.log('❌ 更新用户失败:', result.data?.error || result.error);
      }
      
      // 7. 再次获取用户确认更新
      console.log('\n🔄 7. 确认用户更新:');
      result = await makeRequest(`${API_BASE}/users/${userId}`);
      if (result.success) {
        console.log('✅ 用户信息已更新');
        console.log('更新后的用户:', JSON.stringify(result.data.data, null, 2));
      }
      
      // 8. 删除测试用户
      console.log('\n🗑️ 8. 删除测试用户:');
      result = await makeRequest(`${API_BASE}/users/${userId}`, {
        method: 'DELETE'
      });
      
      if (result.success) {
        console.log('✅ 测试用户删除成功');
        console.log('Response:', JSON.stringify(result.data, null, 2));
      } else {
        console.log('❌ 删除用户失败:', result.data?.error || result.error);
      }
      
    } else {
      console.log('❌ 创建用户失败:', result.data?.error || result.error);
    }
    
    console.log('\n🎉 API 测试完成！');
    console.log('\n📊 测试总结:');
    console.log('- 服务器连接: ✅');
    console.log('- 数据库连接: ✅');
    console.log('- 用户数据获取: ✅');
    console.log('- CRUD 操作: ✅');
    
  } catch (error) {
    console.error('\n❌ 测试过程中发生错误:', error.message);
    console.log('\n请确保：');
    console.log('1. MySQL 服务正在运行');
    console.log('2. 数据库配置正确（localhost:3306, root/123456）');
    console.log('3. 运行了 npm run init-db 初始化数据库');
    console.log('4. 服务器正在运行 npm run dev');
  }
}

// 检查 fetch 支持
if (typeof fetch === 'undefined') {
  console.log('❌ 此脚本需要 Node.js 18+ 版本（内置 fetch API）');
  console.log('或者手动安装: npm install node-fetch');
  process.exit(1);
}

testAPI();
